package com.design.working.dao;

import com.design.working.dto.dept.*;
import com.design.working.po.*;
import com.design.working.po.dept.*;
import com.design.working.vo.dept.*;

import java.util.List;

/**
 * 用工部门端
 *
 */
public interface DeptDAO {

    /**
     * 查找本部门未审批的学生岗位申请记录
     *
     * @param uid  部门员工工号
     * @param page  分页当前页码
     * @param limit 分页每页展示数据
     * @return 查询到的本部门未审批的学生岗位申请记录
     */
    List<DeptHandleStudentWorkApplicationVO> selectStudentWorkApplication(Integer uid, Integer page, Integer limit);

    /**
     * 查询当前部门员工是否有负责的在运行岗位
     *
     * @param deptEmployeeId 部门员工id
     * @return true-有; false-没有
     */
    boolean isDeptHaveResponsibleRunningJob(Integer deptEmployeeId);

    /**
     * 审批学生的岗位申请
     *
     * @param deptEmployeeId 部门员工id
     * @param deptHandleStudentApplicationDTO 部门员工对学生申请记录的审批内容
     */
    void insertStudentApplicationHanding(Integer deptEmployeeId, DeptHandleStudentApplicationDTO deptHandleStudentApplicationDTO);

    /**
     * 通过工号查找部门员工在数据库中id
     *
     * @param uid 部门员工工号
     * @return 部门员工在数据库中id
     */
    int selectDeptEmployeeId(Integer uid);

    /**
     * 查找申请表中学生申请工作填写的个人信息
     *
     * @param smtId 学生申请工作表中对应的个人信息记录id
     * @return 学生申请工作填写的个人信息
     */
    StudentApplicationDetailPO selectStudentApplicationDetail(Integer smtId);

    /**
     * 查找辅导员对学生申请表的意见
     *
     * @param swaId 学生申请工作表id
     * @return 辅导员对学生申请表的意见
     */
    DeptPreAdvicePO selectStudentPreAdvice(Integer swaId);

    /**
     * 查询学生岗位变动申请
     *
     * @param uid   部门员工工号
     * @param page  分页参数
     * @param limit 每页条数
     * @return 查询到的本部门未审批的学生岗位变动申请
     */
    List<DeptHandleStudentWorkMotionPO> selectStudentWorkMotion(Integer uid, Integer page, Integer limit);

    /**
     * 插入部门员工处理的学生岗位变更表意见
     *
     * @param deptEmployeeId             部门员工id
     * @param deptHandleStudentMotionDTO 前端传来的表单数据
     */
    void insertStudentMotionHanding(Integer deptEmployeeId, DeptHandleStudentMotionDTO deptHandleStudentMotionDTO);

    /**
     * 查询岗位学生信息
     *
     * @param uid   部门员工工号
     * @param page  分页参数
     * @param limit 每页条数
     * @return 查询到的本部门的岗位学生信息
     */
    List<DeptSelectJobStudentInfoPO> selectJobStudentInfo(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询岗位学生信息
     *
     * @param uid         部门员工工号
     * @param page        分页参数
     * @param limit       每页条数
     * @param stuUid      学生学号
     * @param studentName 学生姓名
     * @return 查询到的本部门的岗位学生信息
     */
    List<DeptSelectJobStudentInfoPO> selectJobStudentInfoByName(Integer uid, Integer page, Integer limit, String stuUid, String studentName);

    /**
     * 查询学生详细信息
     *
     * @param uid 学生学号
     * @return 学生个人详细信息
     */
    StudentMsgPO selectStudentMsg(Integer uid);

    /**
     * 查询当前部门员工所属部门的学生岗位申请信息
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的本部门的学生岗位申请信息
     */
    List<DeptSelectStudentApplicationPO> selectStudentApplicationRecord(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询当前部门员工所属部门的学生岗位申请信息
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param stuUid      学生学号
     * @param studentName 学生姓名
     * @return 查询到的本部门的学生岗位申请信息
     */
    List<DeptSelectStudentApplicationPO> selectStudentApplicationRecordByName(Integer uid, Integer page, Integer limit, String stuUid, String studentName);

    /**
     * 查询三者都已审批的学生岗位申请的审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的三者都已审批的学生岗位申请的审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination(Integer swaId);

    /**
     * 查询部门员工和管理员都未审批的学生岗位申请审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的部门员工和管理员都未审批的学生岗位申请审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination0(Integer swaId);

    /**
     * 查询管理员未审批的学生岗位申请审批详情
     * @param swaId 学生岗位申请表id
     * @return 查询到的管理员未审批的学生岗位申请审批详情
     */
    StudentApplicationExaminationPO selectStuAppExamination1(Integer swaId);

    /**
     * 查询当前学生岗位申请是否已被部门员工和管理员审批
     *
     * @param swaId 学生岗位申请表id
     * @return 0-两者都未审批; 1-部门员工已审批；2-部门员工和管理员都已审批
     */
    int isHandleStuApp(Integer swaId);

    /**
     * 查询当前部门领导所属部门的全部在运行岗位
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的当前部门领导所属部门的全部在运行岗位
     */
    List<DeptSelectWorkingJobVO> selectDeptWorkingJob(Integer uid, Integer page, Integer limit);

    /**
     * 通过岗位名称查询当前部门领导所属部门的在运行岗位
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门领导所属部门的在运行岗位
     */
    List<DeptSelectWorkingJobVO> selectDeptWorkingJobByName(Integer uid, Integer page, Integer limit, String jobName);

    /**
     * 插入部门领导申请删除岗位的申请信息
     *
     * @param deptEmployeeId            部门员工id
     * @param deptDeleteJobMotionDTO    前端传来的申请信息
     */
    void insertDeptDeleteJobMotion(Integer deptEmployeeId, DeptDeleteJobMotionDTO deptDeleteJobMotionDTO);

    /**
     * 插入部门领导申请发布岗位的申请信息
     *
     * @param deptEmployeeId            部门员工id
     * @param deptAddJobApplicationDTO  前端表单传来的信息
     */
    void insertDeptAddJobApplication(Integer deptEmployeeId, DeptAddJobApplicationDTO deptAddJobApplicationDTO);

    //selectAddJobAppHandleRecord就每次进入岗位审核记录界面用一次
    /**
     * 查询当前部门领导的发布岗位申请的审核信息
     * @param deptEmployeeId   部门员工id
     * @param page             分页页数
     * @param limit            每页数据条数
     * @return 查询到的当前部门领导的发布岗位申请的审核信息
     */
    List<DeptJobApplicationHandlePO> selectAddJobAppHandleRecord(Integer deptEmployeeId, Integer page, Integer limit);

    /**
     * 通过岗位名称查询当前部门领导的发布岗位申请的审核信息
     * @param deptEmployeeId   部门员工id
     * @param page             分页页数
     * @param limit            每页数据条数
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门领导的发布岗位申请的审核信息
     */
    List<DeptJobApplicationHandlePO> selectAddJobAppHandleRecordByName(Integer deptEmployeeId, Integer page, Integer limit, String jobName);

    /**
     * 查询当前发布岗位申请的审批信息
     * @param djaId 学生岗位申请表id
     * @return 查询到的当前发布岗位申请的审批信息
     */
    DeptJobAppExaminationVO selectAddJobAppExamination(Integer djaId);

    //selectDeleteJobAppHandleRecord根本没用上
    /**
     * 查询当前部门领导的删除岗位申请的审核信息
     * @param deptEmployeeId  部门员工id
     * @param page            分页页数
     * @param limit           每页数据条数
     * @return 查询到的当前部门领导的删除岗位申请的审核信息
     */
    List<DeptJobApplicationHandlePO> selectDeleteJobAppHandleRecord(Integer deptEmployeeId, Integer page, Integer limit);

    /**
     * 通过岗位名称查询当前部门领导的删除岗位申请的审核信息
     * @param deptEmployeeId  部门员工id
     * @param page            分页页数
     * @param limit           每页数据条数
     * @param jobName         搜索的岗位的岗位名称
     * @return 查询到的当前部门领导的删除岗位申请的审核信息
     */
    List<DeptJobApplicationHandlePO> selectDeleteJobAppHandleRecordByName(Integer deptEmployeeId, Integer page, Integer limit, String jobName);

    /**
     * 查询当前删除岗位申请的审批信息
     * @param djmId 学生岗位变动表id
     * @return 查询到的当前删除岗位申请的审批信息
     */
    DeptJobAppExaminationVO selectDeleteJobAppExamination(Integer djmId);

    /**
     * 查询当前部门员工是否为部门领导（领导才能发布/删除岗位和查询岗位审核记录）
     *
     * @param  uid  部门员工工号
     * @return true-是; false-不是
     */
    boolean isLeaderToDept(Integer uid);

    /**
     * 查询当前部门员工所属部门的全部已下线岗位
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的当前部门员工所属部门的全部已下线岗位
     */
    List<DeptSelectOfflineJobVO> selectDeptOfflineJob(Integer uid, Integer page, Integer limit);

    /**
     * 通过岗位名称查询当前部门员工所属部门的已下线岗位
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param jobName     搜索的岗位的岗位名称
     * @return 查询到的当前部门员工所属部门的已下线岗位
     */
    List<DeptSelectOfflineJobVO> selectDeptOfflineJobByName(Integer uid, Integer page, Integer limit, String jobName);

    /**
     * 查询该部门已下线岗位的下线审核信息
     * @param jobId 岗位id
     * @return 查询到的该部门已下线岗位的下线审核信息
     */
    DeptOfflineJobExaminationVO selectDeptOfflineJobExamination(Integer jobId);

    /**
     * 查询目前属于在岗状态的岗位学生信息
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的目前属于在岗状态的岗位学生信息
     */
    List<DeptSelectWorkingJobStudentVO> selectDeptWorkingJobStudent(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询目前属于在岗状态的岗位学生信息
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param stuUid      学生学号
     * @param studentName 学生姓名
     * @return 查询到的目前属于在岗状态的岗位学生信息
     */
    List<DeptSelectWorkingJobStudentVO> selectDeptWorkingJobStudentByName(Integer uid, Integer page, Integer limit, String stuUid, String studentName);

    /**
     * 插入部门员工考勤学生岗位信息
     *
     * @param deptEmployeeId              部门员工id
     * @param deptHandleStudentAttendDTO  前端表单传来的考勤信息
     */
    void insertDeptStudentAttendInfo(Integer deptEmployeeId, DeptHandleStudentAttendDTO deptHandleStudentAttendDTO);

    /**
     * 查询该部门岗位的学生考勤记录
     *
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的该部门岗位的学生考勤记录
     */
    List<DeptStudentAttendanceRecordPO> selectDeptStudentAttendance(Integer uid, Integer page, Integer limit);

    /**
     * 通过学号姓名查询该部门岗位的学生考勤记录
     *
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param searchDTO   搜索的信息
     * @return 查询到的通过学号姓名查询该部门岗位的学生考勤记录
     */
    List<DeptStudentAttendanceRecordPO> selectDeptStudentAttendanceByName(Integer uid, Integer page, Integer limit, SearchDeptStudentAttendanceDTO searchDTO);

    /**
     * 通过学号姓名和时间范围查询该部门岗位的学生考勤记录
     *
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @param searchDTO   搜索的信息
     * @return 查询到的通过学号姓名和时间范围查询该部门岗位的学生考勤记录
     */
    List<DeptStudentAttendanceRecordPO> selectDeptStudentAttendanceByTime(Integer uid, Integer page, Integer limit, SearchDeptStudentAttendanceDTO searchDTO);

    /**
     * 查询目前属于结岗/离岗状态的岗位学生信息
     * @param uid         部门员工工号
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的目前属于结岗/离岗状态的岗位学生信息
     */
    List<DeptSelectEndJobStudentPO> selectDeptEndJobStudent(Integer uid, Integer page, Integer limit);

    /**
     * 插入部门员工对学生的用工评价
     *
     * @param deptEmployeeId           部门员工id
     * @param deptEvaluateStudentDTO   前端表单传来的评价信息
     */
    void insertDeptEvaluateStuInfo(Integer deptEmployeeId, DeptEvaluateStudentDTO deptEvaluateStudentDTO);

    /**
     * 查询历史评价记录
     * @param deptEmployeeId           部门员工id
     * @param page        分页页数
     * @param limit       每页数据条数
     * @return 查询到的历史评价记录
     */
    List<DeptEvaluateRecordPO> selectDeptEvaluateRecord(Integer deptEmployeeId, Integer page, Integer limit);
}

